﻿/********************************************************/
/* For 基于.NET的开发技术 课程设计                      */
/*                    学生选课系统                      */
/*author    ：  吴慧文                                  */
/*time      ：  2009年11月8日                           */
/*版本      ：  1.0                                     */
/*文件名    ：  Courses.cs                              */
/********************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CMS
{
    [Serializable]
	class Courses
	{
        private List<Course> courses;

        //构造函数
        public Courses()
        {
            courses = new List<Course>();
        }

        //增加课程
        public void addCourse(Course course)
        {
            courses.Add(course);
        }

        
        //删除课程（实质上是通过课程id删除之）
        public void deleteCourse(Course course)
        {
            for (int i = 0; i < courses.Count; i++)
            {
                if (courses.ElementAt(i).Equals(course))
                {
                    courses.RemoveAt(i);
                    break;
                }
            }
        }

        //查询课程 
        //Courses c = new Courses();
        //c[ID:xx] 按课程编号查询
        //c[NAME:xx] 按课程名字查询
        //c[TEACHER:xx] 按老师名字查询
        //c[""] 返回所有课程信息
        //c[DAY:xx] 按课程上课星期几查询
        //c[NUM:xx] 按课程上课节次查询
        //c[DAYANDNUM:xx] 按上课星期几和节次一同查询
        public List<Course> this[string s]
        {
            get
            {
                if (s.Equals(""))
                {
                    return courses;
                }else 
                {
                    string[] tempS = s.Split(':');
                    if (tempS[0] != ""&&tempS[1]!="")
                    {
                        if (tempS[0].Equals("ID"))
                        {
                            //查询按id；
                            return this.getCourseById(tempS[1]);
                        }
                        if (tempS[0].Equals("NAME"))
                        {
                            //按课程名查询；
                            return this.getCourseByName(tempS[1]);
                        }
                        if (tempS[0].Equals("TEACHER"))
                        {
                            //按教师姓名查询
                            return this.getCourseByTeac(tempS[1]);
                        }
                        if (tempS[0].Equals("DAY"))
                        {
                            //按上课星期几查询
                            return this.getCourseByDay(Convert.ToInt32(tempS[1]));
                        }
                        if (tempS[0].Equals("NUM"))
                        {
                            //按上课节次查询
                            return this.getCourseByNum(Convert.ToInt32(tempS[1]));
                        }
                        if (tempS[0].Equals("DAYANDNUM"))
                        {
                            //按上课星期几和节次查询
                            return this.getCourseByDayAndNum(Convert.ToInt32(tempS[1]), Convert.ToInt32(tempS[2]));
                        }
 
                    }
                    return null;
                }
            }
        }

        //私有函数，根据课程id查询课程，返回相关课程
        private List<Course> getCourseById(string id)
        {
            List<Course> result = new List<Course>();
            foreach (Course tem in courses)
            {
                if (tem.Id.Equals(id))
                {
                    result.Add(tem);
                }
            }
            return result;
        }

        //私有函数，根据课程name查询课程，返回相关课程
        private List<Course> getCourseByName(string name)
        {
            List<Course> result = new List<Course>();
            foreach (Course tem in courses)
            {
                if (tem.Name.Equals(name))
                {
                    result.Add(tem);
                }
            }
            return result;
        }

        //私有函数，根据课程老师name查询课程，返回相关课程
        private List<Course> getCourseByTeac(string teac)
        {
            List<Course> result = new List<Course>();
            foreach (Course tem in courses)
            {
                if (tem.TheTeacher.Name.Equals(teac))
                {
                    result.Add(tem);
                }
            }
            return result;
        }

        //私有函数，按上课星期几查询,返回相关课程
        private List<Course> getCourseByDay(int day)
        {
            List<Course> result = new List<Course>();
            foreach (Course tem in courses)
            {
                if (tem.DayOfWeek == day)
                {
                    result.Add(tem);
                }
            }
            return result;
        }

        //私有函数，按上课节次查询，返回相关课程
        private List<Course> getCourseByNum(int num)
        {
            List<Course> result = new List<Course>();
            foreach (Course tem in courses)
            {
                if (tem.NumOfDay == num)
                {
                    result.Add(tem);
                }
            }
            return result;
        }

        //私有函数，按上课星期几和节次查询，返回相关课程
        private List<Course> getCourseByDayAndNum(int day,int num)
        {
            List<Course> result = new List<Course>();
            foreach (Course tem in courses)
            {
                if (tem.DayOfWeek == day && tem.NumOfDay == num)
                {
                    result.Add(tem);
                }
            }
            return result;
        }
	}

}
